TCP/IP协议之ICMP协议

您所在的位置:网站首页 tcp ip协议包括了tcp协议和ip协议 TCP/IP协议之ICMP协议

TCP/IP协议之ICMP协议

2024-07-12 06:51| 来源: 网络整理| 查看: 265

一、定义

ICMP协议(Internet Control Message Protocol)是Internet控制消息协议,用于在IP主机、路由器之间传递控制消息。这些控制消息虽然不是用户数据,但是,对于保证用户数据的正确传输有着重要的作用。

二、特点

1、ICMP出现的背景

IP协议完成了数据在各主机间的递交,但是,IP协议是一种无连接的不可靠的数据交付,IP协议不提供任务错误校验和恢复机制。因此,设计了ICMP协议弥补上诉缺陷。

2、ICMP报文封装

 ICMP封装在IP报进行传输。ICMP报文本身被封装在IP数据报的数据区中,而这个IP数据报又被封装在帧数据中。在IP数据报报头中的协议(Protocol)字段设置成1,表示该数据是ICMP报文。

三、ICMP报文格式

1、ICMP报文格式 各种类型的ICMP报文由下图所示。由报文中的类型字段和代码字段共同决定了ICMP报文的类型。      (1)类型(Type)字段,长度是1字节,用于定义报文类型。      (2)代码(Code)字段,长度是1字节,表示发送这个特定报文类型的原因。      (3)校验和(Checksum)字段,长度是2字节,用于数据报传输过程中的差错控制。与IP报头校验和的计算方法类似,不同的是其是对整个ICMP报文进行校验。      (4)报头的其余部分,其内容因不同的报文而不同。      (5)数据字段,其内容因不同的报文而不同。对于差错报告报文类型,数据字段包括ICMP差错信息和触发ICMP的整个原始数据报,其长度不超过576字节。 ICMP报文包含:ICMP首部(8字节)+IP数据报首部+IP数据报数据区的前8个字节。

具体如下图:

IP包首部要被传回的原因,因为IP首部中包含了协议字段,使得ICMP可以知道如何解释后面的8个字节。而IP首部后面的8字节(UDP的首部或者TCP首部,UDP和TCP首部的8个字节分别包含了16位的目的端口号和源端口号),根据源端口号就可以把差错报文与某个特定的用户进程关联。 2、ICMP报文类型 从功能上划分,ICMP报文可分为2大类:ICMP差错报文和ICMP查询报文。 其中,差错报告报文包括:目的不可达、源主机消亡、超时、参数问题、重定向。查询报文包括:回应请求和应答(ping)、信息请求和应答(已弃用)、时间戳和时间戳应答、地址掩码请求和应答、路由器通告和请求。 如下图所示,图中的最后两列表明ICMP报文是一份查询报文还是一份差错报文。  (1)常用的差错报文详解

1)目的站不可达报文

当路由器不能给数据报找到合适的路由路径,或者主机不能将数据报递交给上层协议时,相应的IP数据报就会被丢弃,然后产生一个目的站不可达差错控制报文给源主机。

2)数据报超时报文

       在数据报的传输过程中,首部的TTL值用于防止数据报因路由表的问题而无休止地在网络中传输。当TTL值为0时,路由器会丢弃当前的数据报,并产生一个 ICMP数据报超时报告。另外在信宿进行分片重组时会启动重组定时器,一旦重组 定时器超时,信宿就会丢弃当前正在重组的数据报,然后产生一个ICMP数据报超 时报告,并向信源发送该超时报告。 

       数据报超时报告的类型和代码的含义如表所示。类型值11表示是数据报超时报文,代码“0”表示TTL超时,代码“1”表示分片重组超时。

(2)常见的查询报文详解

只讲述回送请求或会送应答报文。

该报文用于确定两个网络设备之间是否能够正常通讯。主机或路由器向某个目的主机发送ICMP回送请求报文,任何收到回送请求的目的主机都会生成一个回送应答报文,并发返回给源主机。

3、不会导致产生ICMP差错报文的情况

⑴  ICMP差错报文(ICMP查询报文可能会产生ICMP差错报文) ⑵ 目的地址是广播地址或多播地址的IP数据报 ⑶ 作为链路层广播的数据报 ⑷ 不是IP分片的第一片 ⑸ 源地址不是单个主机的数据报。 这些规则是为了防止ICMP差错报文对广播分组响应所带来的广播风暴。

四、ICMP应用实例

1、ping原理

ping的本质是ICMP回送请求报文和回送应答报文。

2、tracert原理

tracert程序的设计是利用ICMP及IP header的TTL(Time To Live)字段。

首先,Tracert送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),Tracert收到这个消息后,便知道这个路由器存在于这个路径上,接着Tracert再送出另一个TTL是2 的datagram,发现第2 个路由器...... Tracert每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3